package com.eric.config;

import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.asm.Handle;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
/*        // 注册 Sa-Token 拦截器，校验规则为 StpUtil.checkLogin() 登录校验。
        registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
                .addPathPatterns("/**")
//                允许/login/dologin地址不用拦截
                .excludePathPatterns("/login/doLogin")
                .excludePathPatterns("/userInfo/saveOne")
                .excludePathPatterns("/userInfo/modifyOneUser")
                .excludePathPatterns("/userInfo/modifyOneUserRole")
                .excludePathPatterns("/kick/logout");*/
        registry.addInterceptor(new SaInterceptor(handler->{
//            拦截 /  下面所有路由入口
            SaRouter.match("/**","/login/doLogin",r->StpUtil.checkLogin());
//           拦截的路由不包括/login/doLogin
//                    .notMatch("/login/doLogin");
//                    .check(r->StpUtil.checkLogin());
//           match方法是拦截，第一个参数是要拦截的路由地址，第二个参数，是一个权鉴方法，返回值是void。
//            一般来做，只要是登录了，就可以访问所有路由接口地址
//            SaRouter.match()方法是特意拦截第一个参数指向的接口，第二个参数如果通过权鉴，就可以访问，否则被拒绝
            SaRouter.match("/getInfo/getTokenValue",r->StpUtil.checkPermission("user.add"));
            SaRouter.match("/getInfo/getTokenName",r->StpUtil.checkPermission("user.delete"));
            SaRouter.match("/login/loginInfo",r->StpUtil.checkRole("admin"));
            SaRouter.match("/getInfo/getRoleList",r-> StpUtil.checkRole("normal"));
        })).addPathPatterns("/**");


    }
}
